import { RouteRecordRaw } from 'vue-router';

import { defineStore } from 'pinia'



// 此文件自新增起,并未使用
export interface SystemInfoState {
    // 是否展开菜单栏
    shrankSidebar: boolean,
    //默认获取的是缓存的菜单信息，当菜单管理模块对菜单进行修改后，值会变化
    menuList: any[],
    //当前登录用户的信息
    userInfo: Partial<any>,

    // 当前选中的app代码(code)
    currentActiveApplication: string,
    // 管理界面路由历史记录列表
    routeHistoryList: RouteRecordRaw[],
    // 当前应用是否正在切换
    applicationsChanging: boolean,
    // 按钮权限code集合
    PowerButtons: Set<string>,
    // 系统是否初始化完毕
    systemInited: boolean
}


export type SystemInfoGetter = {
    applications: (this: SystemInfoState) => any[],
    logged: (this: SystemInfoState) => boolean,
}

export interface SystemInfoActions {

    updateSidebarWidth: () => void,
    /**
     * 更新菜单列表
     * @param {string|Array} value 
     */
    updateMenuList: (value: any[]) => void,
    // 更新路由记录
    updateRouteHistoryList: (value: RouteRecordRaw[] | RouteRecordRaw) => void,

    // 更新正在使用的应用code
    updateCurrentActiveApplication: (value: string) => void,
    // 更新用户信息
    updateUserInfo: (value: any) => void,
    // 应用切换状态(应用是否正在切换)
    applicationsChangStatus: (value: boolean) => void,
    /**
     * 该方法用户初始化用户信息,以及连带的用户应用列表,还有用户登陆后的已经默认选中的应用,极其重要的action!!!!!!!!
     */
    getUserInfo: () => Promise<any>,
    /**
     * 应用切换调用该actions
     * @param application  应用程序的代码(code)
     * @return  应用对应的路由列表树promise
     */
    changeCurrentApp: (this: (SystemInfoState & SystemInfoActions), application: string) => Promise<any[]>,
    loginout: (this: SystemInfoState) => Promise<any>
}

export const useSystemInfo = defineStore<'systeminfo', Partial<SystemInfoState>, SystemInfoGetter, SystemInfoActions>('systeminfo', {
    state: () => ({

    }),


})